package cn.anquing.demo.mybatisplus.code.service;

import cn.anquing.demo.mybatisplus.code.pojo.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author wqq
 * @since 2022-04-27
 */
public interface IUserService extends IService<User> {
    /**
     * test.
     *
     * <p>test.
     *
     * @author wangqq65
     * @since 2022/4/21 17:59
     * @return
     */
    void test();
    
    /**
     * eg1.
     *
     * <p>1、名字中包含雨并且年龄小于40
     * 	name like '%雨%' and age<40
     *
     * @author wangqq65
     * @since 2022/4/27 11:42
     * @param 
     * @return 
     */
    List<User> eg1();

    /**
     * eg2.
     *
     * <p>2、名字中包含雨年并且龄大于等于20且小于等于40并且email不为空
     *    name like '%雨%' and age between 20 and 40 and email is not null
     *
     * @author wangqq65
     * @since 2022/4/27 12:11
     * @param
     * @return
     */
    List<User> eg2();

    /**
     * eg3.
     *
     * <p>3、名字为王姓或者年龄大于等于25，按照年龄降序排列，年龄相同按照id升序排列
     *    name like '王%' or age>=25 order by age desc,id asc
     *
     * @author wangqq65
     * @since 2022/4/27 12:16
     * @param
     * @return
     */
    List<User> eg3();
    
    /**
     * eg4.
     *
     * <p>4、创建日期为2019年2月14日并且直属上级为名字为王姓
     *       date_format(create_time,'%Y-%m-%d')='2019-02-14' and manager_id in (select id from user where name like '王%')
     *
     * @author wangqq65
     * @since 2022/4/27 12:24
     * @param 
     * @return 
     */
    List<User> eg4();

    /**
     * eg5.
     *
     * <p>5、名字为王姓并且（年龄小于40或邮箱不为空）
     *     name like '王%' and (age<40 or email is not null)
     *
     * @author wangqq65
     * @since 2022/4/27 12:35
     * @param
     * @return
     */
    List<User> eg5();

    /**
     * eg6.
     *
     * <p>6、名字为王姓或者（年龄小于40并且年龄大于20并且邮箱不为空）
     *     name like '王%' or (age<40 and age>20 and email is not null)
     *
     * @author wangqq65
     * @since 2022/4/27 20:26
     * @param
     * @return
     */
    List<User> eg6();

    /**
     * eg7.
     *
     * <p>7、（年龄小于40或邮箱不为空）并且名字为王姓
     *     (age<40 or email is not null) and name like '王%'.
     *
     * @author wangqq65
     * @since 2022/4/27 20:35
     * @param
     * @return
     */
    List<User> eg7();

    /**
     * eg8.
     *
     * <p>8、年龄为30、31、34、35
     *     age in (30、31、34、35)
     *
     * @author wangqq65
     * @since 2022/4/27 20:44
     * @param
     * @return
     */
    List<User> eg8();

    /**
     * eg9.
     *
     * <p>9、只返回满足条件的其中一条语句即可
     * limit 1
     *
     * @author wangqq65
     * @since 2022/4/27 20:54
     * @param
     * @return
     */
    List<User> eg9();

    /**
     * eg10.
     *
     * <p>10、名字中包含雨并且年龄小于40(需求1加强版)
     * 第一种情况：select id,name
     * 	           from user
     * 	           where name like '%雨%' and age<40
     *
     * @author wangqq65
     * @since 2022/4/27 20:58
     * @param
     * @return
     */
    List<User> eg10();

    /**
     * eg11.
     *
     * <p>第二种情况：select id,name,age,email
     * 	           from user
     * 	           where name like '%雨%' and age<40
     *
     * @author wangqq65
     * @since 2022/4/27 21:06
     * @param
     * @return
     */
    List<User> eg11();

    /**
     * eg12.
     *
     * <p>使用实体作为条件.
     *
     * @author wangqq65
     * @since 2022/4/27 22:02
     * @param
     * @return
     */
    List<User> eg12();

    /**
     * eg13.
     *
     * <p>AllEq作为条件
     *
     * @author wangqq65
     * @since 2022/4/27 22:23
     * @param
     * @return
     */
    List<User> eg13();

    /**
     * eg14.
     *
     * <p>listMaps返回List<Map></Map>，用于统计或者其他返回对象不是为ENTITY的场景.
     *
     * @author wangqq65
     * @since 2022/4/27 22:51
     * @param
     * @return
     */
    List<Map<String,Object>> eg14();

    /**
     * eg15.
     *
     * <p>listObjs返回第一列
     *
     * @author wangqq65
     * @since 2022/4/27 23:07
     * @param
     * @return
     */
    List<Object> eg15();

    /**
     * eg16.
     *
     * <p>总记录数.
     *
     * @author wangqq65
     * @since 2022/4/27 23:12
     * @param
     * @return
     */
    Integer eg16();

    /**
     * 自定义sql
     * @return
     */
    List<User> eg17();
}
